#ifndef TABLE_H
#define TABLE_H
#define ASCII_SIZE 128
#include <array>
#include <vector>
#include <functional>
using namespace std;
using Tuple = array<int, ASCII_SIZE>;
/**
 * 状态矩阵
*/
using Function = function<pair<int, bool>(int,char,const vector<Tuple> &_table)>;
class Table
{
private:
    vector<Tuple> table;
    // 语义子程序
    /*
    int 当前状态
    int >= 0 Token读完
        < 0 Token未读完
    bool 读头是否后移
    */
    Function _entry;
public:
    // 状态转移
    int state(int u, char c);
    // 语义子程序
    pair<int, bool> entry(int u, char c);
    Table(const vector<Tuple> &_table, const Function &__entry);
};
#endif